\chapter{语言环境}

运行使用Tenon语言编写的程序，需要经过编译和运行两个阶段。
Tenon语言编译时环境和Tenon语言运行时环境分别用于描述在编译Tenon语言源程序时
和运行Tenon语言应用时的语言外部必要条件和限制。

Tenon语言是大小写敏感的。

\section{Tenon语言编译时环境}

\verb!Tenon程序的编译!是指从任务的Tenon源程序文件生成Tenon可执行文件的过程。
Tenon语言的源程序文件必须使用文本文件，编码格式必须使用UTF-8，
并且只有注释和字符串字面量中允许出现编码值在127以上的字符。
源程序中的换行符可以使用Windows平台的CRLF，也可以使用类Unix平台的LF。

\subsection{编译过程}

Tenon语言程序的编译过程可以分为源文件加载、语法分析、模块链接、代码生成、中间码生成、中间码汇编等几个阶段。

源文件加载：在编译Tenon语言的源程序文件时，Tenon语言编译器会首先缓存源程序文件的全部文本内容。

语法分析：Tenon语言的\verb!语法分析器!接着对缓存的文本内容从头到尾进行处理。
语法分析器一边调用\verb!词法分析器!将文本内容解析为词法元素的序列，
一边对解析的词法元素进行语法归纳。

模块链接：在此阶段，Tenon语言编译器会对所有已进行语法分析的模块进行符号链接、确定数组维数及常量、
检查表达式合法性等工作。

代码生成：Tenon语言编译器将Tenon语言的语句翻译为Tenon执行器指令的代码。

中间码生成：Tenon语言编译器将语法分析得到的模块类型和变量信息、代码生成得到的所有函数的指令序列输出到中间码文件。

\section{Tenon语言运行时环境}

Tenon执行器可以加载并执行单个或者多个任务，每个任务在Tenon执行器中以线程的形式存在。
在运行时，每个任务会对应于一个执行时上下文环境(Execution Context)，
包含了程序执行时的堆栈信息、帧信息、寄存器信息、中断信息、错误信息等。

\subsection{Tenon可执行二进制文件}

Tenon执行器可以将文件系统上的可执行二进制文件加载为内存中的单个或多个可执行任务。
Tenon可执行二进制文件（或称为Tenon可执行文件）以.tbin为文件后缀，它其实是一个zip压缩文件。
